package com.geek.factory.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.geek.factory.entity.StockCheckAdjustment;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 库存盘点差异处理服务接口
 * </p>
 *
 * @author author
 * @since 2025-06-29
 */
public interface IStockCheckAdjustmentService extends IService<StockCheckAdjustment> {

    /**
     * 创建差异处理记录
     * @param detailId 盘点明细ID
     * @param adjustmentType 差异类型
     * @param adjustmentQuantity 调整数量
     * @param reason 差异原因
     * @param createdBy 创建人
     * @return 创建的差异处理记录
     */
    StockCheckAdjustment createAdjustment(Integer detailId, String adjustmentType,
                                          BigDecimal adjustmentQuantity, String reason, String createdBy);

    /**
     * 审批差异处理
     * @param adjustmentId 差异处理ID
     * @param approvedBy 审批人
     * @param approvalResult 审批结果
     * @param approvalComments 审批意见
     * @return 是否审批成功
     */
    boolean approveAdjustment(Integer adjustmentId, String approvedBy,
                              String approvalResult, String approvalComments);

    /**
     * 获取差异处理统计信息
     * @param checkId 盘点单ID
     * @return 统计信息
     */
    Map<String, Object> getAdjustmentStats(Integer checkId);

    /**
     * 检查差异处理是否可以修改或删除
     * @param adjustmentId 差异处理ID
     * @return true=可以修改/删除，false=不能修改/删除
     */
    boolean isAdjustmentEditable(Integer adjustmentId);

    /**
     * 根据盘点明细ID获取差异处理记录
     * @param detailId 盘点明细ID
     * @return 差异处理记录列表
     */
    List<StockCheckAdjustment> getAdjustmentsByDetailId(Integer detailId);

    /**
     * 根据盘点单ID获取所有差异处理记录
     * @param checkId 盘点单ID
     * @return 差异处理记录列表
     */
    List<StockCheckAdjustment> getAdjustmentsByCheckId(Integer checkId);
}